<?php  
App::import('Vendor','HandleSoap/HandleSoapClass');
class WebservicesController extends AppController {
	
	
	var $components = array('RequestHandler',/*'Security'*/);

	
	public function beforeFilter()
	{
		parent::beforeFilter();
		$this->Auth->allow('service', 'wsdl');
		/*$this->Security->blackHoleCallback = 'forceSSL';
        $this->Security->requireSecure();*/
	}
	
	function service() 
	{
		$this->layout = false;
		
		//$this->autoRender = false;
		//Configure::write('debug', 0);
		
		$this->loadModel("Webservice",
							"User",
							"Persona",
							"DetalleSolicitudCompra",
							"SolicitudCompra",
							"Reservacione",
							"BeneficiosAdministrativos",
							"AdminSolicitude",
							"response");
		ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache
		
		$this->response->header('Access-Control-Allow-Origin', '*');
		
		//$server = new SoapServer('http://ec2-54-227-174-108.compute-1.amazonaws.com/Webservices/wsdl');
		/*Windows -->*/ $server = new SoapServer('http://'.$_SERVER['HTTP_HOST'].'/BackEndRecursosHumanos/Webservices/wsdl');
		/*Ubuntu -->*/ //$server = new SoapServer('http://localhost/BackEndRecursosHumanos/Webservices/wsdl');
		
		$server->setClass("Webservice",
							"User",
							"DetalleSolicitudCompra",
							"SolicitudCompra",
							"Reservacione",
							"BeneficiosAdministrativos",
							"AdminSolicitude");
		
		$server->handle();
		
	}
	public function forceSSL() 
	{
        return $this->redirect('https://' . env('SERVER_NAME') . $this->here);
    }
	function wsdl() 
	{
		
		$this->layout = false;
		
		Configure::write('debug', 0);
		 
		$this->RequestHandler->respondAs('xml');
		
	}
	
	public function validar_usuario($username, $pass)
	{
		$this->loadModel('User');
		$password = AuthComponent::password($pass);
		$usuario = $this->User-> query(
											'SELECT *
												FROM users U, personas P, tipo_cuentas TC, Direccions D
												WHERE U.username = "'.$username.'" AND
												U.password = "'.$password.'" AND
												P.direccion_id = D.id AND
												U.persona_id = P.id AND
												U.tipo_cuenta_id = TC.id'
											
										);
		if (count($usuario) == 0)
		{
			return false;
		}
		else 
		{
			return true;	
		}
	}
	
	public function pruebaWsdl($username, $pass, $id_beneficio)
	{
		$this->layout = null;
		$nombre_procedimiento = 'GETBENEFICIOACUM';
		$CODIGO_BIEN = "100";
		$CODIGO_ERROR_PARAM = "150";
		$CODIGO_ACCESO_DENEGADO = "200";
		$CODIGO_VACIO = "300";
		$CODIGO_ERROR = "400";
		
		$CODIGO_COMPLETO = $CODIGO_BIEN;
		$CODIGO_INCOMPLETO = $CODIGO_ACCESO_DENEGADO;
		$CODIGO_INCOMPLETO = $CODIGO_VACIO;
		
		$user[$nombre_procedimiento] = array();
		$datos_articulo = array();
		$arreglo_json = array();
			
			
		$usuario = $this->getUsuario($username, $pass);
		
		if (count($usuario) == 0)
		{
			$user[$nombre_procedimiento] = array(
													'STATUS' => $CODIGO_ERROR_PARAM,
													'DATA' => array("")
												 ); 
		}
		else 
		{
			
			$datos = array();
			try 
			{
					
				$this->requestAction('/api/sendEmailAcumBeneficio/'.$usuario[0]['U']['username'].'/'.$id_beneficio);
										
				array_push(
							$datos, array(
												'STATUS_SOLICITUD' => $CODIGO_BIEN
											)
						);
			}
			catch (Exception $ee)
			{
				array_push(
							$datos, array(
												'STATUS_SOLICITUD' => $CODIGO_ERROR
											)
						);
			}
			
			array_push(
							$arreglo_json, array(
													'STATUS' => $CODIGO_BIEN,
													'DATA' => $datos,
												)
						);
			$user[$nombre_procedimiento] = $arreglo_json;
		}

		//return json_encode($user);
		$this->set('json',json_encode($user));
	
		
	}
	public function getRecibo($username,$id_tipo_recibo,$fecha_inic,$fecha_fin)
	{
			
		/*$str_query = 'SELECT RP . * , TR . * 
								FROM recibo_pagos RP, tipo_recibos TR, users U
								WHERE U.persona_id = RP.persona_id
								AND RP.tipo_recibo_id = TR.id
								AND U.username =  "'.$username.'"
								AND TR.id = '.$id_tipo_recibo.'
								AND AND (RP.fecha_emitido_pago
								BETWEEN  "'.$fecha_inic.'"
								AND  "'.$fecha_fin.'")
								ORDER BY RP.fecha_emitido_pago DESC';*/
		$str_query = 'SELECT RP . * , TR . * 
								FROM recibo_pagos RP, tipo_recibos TR, users U
								WHERE U.persona_id = RP.persona_id
								AND RP.tipo_recibo_id = TR.id
								AND U.username =  "'.$username.'" ';

		
		if ($id_tipo_recibo != 0)
		{
			$str_query = $str_query. 'AND TR.id = '.$id_tipo_recibo;
		}
		
		$str_query = $str_query. ' AND (RP.fecha_emitido_pago BETWEEN "'.$fecha_inic.'"
									AND  "'.$fecha_fin.'")
									ORDER BY RP.fecha_emitido_pago DESC';
									
		$recibo_pagos = $this->User-> query( $str_query );
		
		return $recibo_pagos;
	}
	public function resetPassord($username, $email)
	{
		$this->loadModel('User');		
		$usuario = $this->User->query(
										'SELECT *
										FROM users U, personas P
										WHERE U.persona_id = P.id
										AND U.active_user = 1
										AND P.email_persona = "'.$email.'"
										AND U.username = "'.$username.'"'
									);
						
		if (count($usuario)>0)
		{
			$password_defaul = 123456789;
			$array_user = array('User' => array(
														'id' => $usuario[0]['U']['id'],
														'password' => $password_defaul
													));
			$this->loadModel('User');
			return ($this->User->save($array_user));
		}
		else 
		{
			return false;	
		}
	}
	public function getCumpleanos($username,$fecha_selecc_inic,$fecha_selecc_fin)
	{
			

		$eventos = $this->User->query(
											'SELECT P.*, S.*,D.*,TCC.*, S.*
												FROM users U, departamento_personas DP, 
												departamentos D, sedes S, personas P, 
												tipo_cargos TCC
												WHERE P.id = DP.persona_id 
												AND DP.fecha_fin_persona_departamento IS NULL 
												AND D.id = DP.departamento_id 
												AND TCC.id = DP.tipo_cargo_id 
												AND DP.sede_id = S.id 
												AND U.persona_id != DP.persona_id
												AND U.username =  "'.$username.'"
												AND DATE_FORMAT( fecha_nacimiento,  "%m-%d" ) 
												BETWEEN DATE_FORMAT(  "'.$fecha_selecc_inic.'",  "%m-%d" ) 
												AND DATE_FORMAT(  "'.$fecha_selecc_fin.'",  "%m-%d" ) 
												ORDER BY fecha_nacimiento ASC'		
											);
		return $eventos;

	}
	public function getArticulosFromSolicitud($id_solicitud)
	{
		$array_articulos = array();
		$articulos = $this->User->query(
											'SELECT *
												FROM solicitud_compras SC, 
												detalle_solicitud_compras DSC, 
												articulos A, tipo_articulos TA
												WHERE SC.id = DSC.solicitud_compra_id
												AND A.tipo_articulo_id = TA.id
												AND DSC.articulo_id = A.id
												AND SC.id = '.$id_solicitud
										);
										
		
		foreach ($articulos as $articulo ) 
		{
			array_push($array_articulos, array(
													"articulo_id" => $articulo['A']['id'],
													"nombre_articulo" => $articulo['A']['nombre_articulo'],
													"codigo_articulo" => $articulo['A']['codigo_articulo'],
													"url_foto_articulo" => $articulo['A']['foto_articulo'],
													"tipo_articulo_id" => $articulo['TA']['id'],
													"nombre_tipo_articulo" => $articulo['TA']['nombre_tipo_articulo'],
																										
													"precio_unitario_articulo" => $articulo['DSC']['precio_unitario_solicitud'],
													"cantidad_solicitud_compra" => $articulo['DSC']['cantidad_solicitud_compra'],
													
													

												)
						  );

		}
		
		
		return $array_articulos;
	}
	
	public function insertSolicitudCompra($costo,$tienda_id,$persona_id,$fecha_solicitud)
	{
		$this->loadModel('SolicitudCompra');
		$this->SolicitudCompra->create();
		$data = array(
						'tienda_id' => $tienda_id,
						'persona_id' => $persona_id,
						'fecha_solicitud_compra' => $fecha_solicitud,
						'total_solicitud_compra' => $costo,
						'tipo_status_id' => 2 // Por Confirmacion
						);
								
		if ($this->SolicitudCompra->save($data))		
		{
			return true;
		}
		else 
		{
			return false;	
		}
	}
	public function insertArticuloSolicitudCompra($solicitud_id,$cantidad,$articulo)
	{
		$data = array (
						'solicitud_compra_id' => $solicitud_id,
						'articulo_id' => $articulo[0]['A']['id'],
						'cantidad_solicitud_compra' => $cantidad,
						'precio_unitario_solicitud' => $articulo[0]['C']['precio_unitario_articulo']
					);
		$this->loadModel('DetalleSolicitudCompra');
		$this->DetalleSolicitudCompra->create();
		if ($this->DetalleSolicitudCompra->save($data))
		{
			return true;
		}
		else 
		{
			return false;	
		}

	}
	public function getListaContactos($username, $fecha_selec)
	{
		$contactos = $this->User->query(
												'SELECT P.apellido_persona_1 as nombre_clave, P.* , D.*, DP_2.*, S.*, DPS.*, TCC.*, SUP.*
													FROM users U, personas P, departamento_personas DP_1, 
													departamento_personas DP_2, departamentos D, sedes S,
													tipo_cargos TCC, departamento_sedes DPS
													LEFT OUTER JOIN personas SUP ON SUP.id = DPS.persona_id
													WHERE U.persona_id = DP_1.persona_id
													AND DP_1.sede_id = DP_2.sede_id
													AND P.id = DP_2.persona_id
													AND P.id != U.persona_id
													AND D.id = DP_2.departamento_id
													AND DP_2.fecha_fin_persona_departamento IS NULL
													AND S.id = DP_2.sede_id
													AND U.username =  "'.$username.'"
													AND P.fecha_modificacion > "'.$fecha_selec.'"
													AND DP_2.tipo_cargo_id = TCC.id
													AND DP_2.departamento_sede_id = DPS.id
													ORDER BY nombre_clave ASC'
					
										);
		return $contactos;
	}
	public function getModulo($username)
	{


		
		$modulo = $this->User->query(
												'SELECT *
													FROM 
													configuracion_sistemas CSI,
													configuracion_modulos CM,
													departamento_personas DP,
													modulo_sistemas M,
													personas P,
													sedes S,
													users U
													WHERE U.persona_id = P.id 
													AND DP.persona_id = P.id
													AND DP.sede_id = S.id
													AND S.configuracion_sistema_id = CSI.id
													AND CM.configuracion_sistema_id = CSI.id
													AND CM.modulo_sistema_id = M.id
													AND U.username ="'.$username.'" 
													AND DP.fecha_fin_persona_departamento IS NULL'
											); 
		return $modulo;

	}
	
	public function getHospital($id_seguro)
	{
		$hospitales = $this->User-> query(	
													'SELECT H.*, D.*
														FROM hospitals H, 
														hospital_seguros HS,
														direccions D
														WHERE H.id = HS.hospital_id	
														AND H.direccion_id = D.id 
														AND HS.seguro_id = '.$id_seguro
										);
		return $hospitales;
	}
	public function getFamiliar($username)
	{
		$familiar = $this->User-> query(
											'SELECT F.*, P.*, FP.*
												FROM users U, familiares F, familiar_personas FP,
												parentescos P
												WHERE U.username = "'.$username.'" AND
												U.persona_id = FP.persona_id AND
												F.id = FP.familiares_id AND
												FP.parentesco_id = P.id'
								
							);
		return $familiar;
	}
	
	public function insertReservacion($ocio_id,$tipo_reservaciones_id,$persona_id,
										$fecha_reservaciones,$hora_inic_reservaciones,
										$hora_fin_reservaciones, $descripcion_reservaciones)
	{
		
		$this->loadModel('Reservacione');
		$this->Reservacione->create();
		$data = array(
						'ocio_id' => $ocio_id,
						'tipo_reservaciones_id' => $tipo_reservaciones_id,
						'persona_id' => $persona_id,
						'fecha_reservaciones' => $fecha_reservaciones,
						'hora_inic_reservaciones' => $hora_inic_reservaciones,
						'hora_fin_reservaciones' => $hora_fin_reservaciones,
						'descripcion_reservaciones' => $descripcion_reservaciones
						);
		if ($this->Reservacione->save($data))		
		{
			return true;
		}
		else 
		{
			return false;	
		}
	}
	
	public function getDireccion($id_direccion)
	{
		$direccion = $this->User->query(
												"SELECT D.*
													FROM direccions D
													WHERE D.id = ".$id_direccion
													
										);
		
		if ($direccion[0]['D']['direccion_id'] == null)
		{
			return $direccion[0]['D']['nombre_direccion'];
		}
		else 
		{
			$nombre_dir = $direccion[0]['D']['nombre_direccion'].', '.$this->getDireccion($direccion[0]['D']['direccion_id']);
			return $nombre_dir;
		}
		
	}

	public function getBeneficioAdm($id_beneficio,$username)
	{
		$beneficio = $this->User->query(
												"SELECT BA.*,BAS . * 
													FROM users U, departamento_personas DP, 
													beneficios_administrativos_sedes BAS,
													beneficios_administrativos BA
													WHERE U.persona_id = DP.persona_id
													AND DP.sede_id = BAS.sede_id
													AND BA.id = BAS.beneficios_administrativos_id
													AND BA.id = ".$id_beneficio."
													AND U.username =  '".$username."'"
					
										);
		return $beneficio;
	}
	
	public function getArticulo($id_articulo)
	{
		$articulo = $this->User->query(
										'SELECT *
										FROM articulos A, catalogos C
										WHERE C.articulo_id = A.id AND
										A.id = '.$id_articulo
										);
		return $articulo;
	}
	
	public function getUsuario($username, $pass)
	{
		$password = AuthComponent::password($pass);
		$this->loadModel('User');
		$this->User->create();
		$usuario = $this->User-> query(
											'SELECT *
												FROM users U, personas P, tipo_cuentas TC, Direccions D,
												departamentos DP, departamento_personas DPP, tipo_nacionalidads TN,
												tipo_cargos TCC, sedes S, departamento_sedes DPS
												WHERE U.username = "'.$username.'" AND
												U.password = "'.$password.'" AND
												P.direccion_id = D.id AND
												U.persona_id = P.id AND
												U.tipo_cuenta_id = TC.id AND
												DPP.persona_id = P.id AND
												DPP.departamento_id = DP.id AND
												P.tipo_nacionalidad_id = TN.id AND
												DPP.tipo_cargo_id = TCC.id AND
												DPP.sede_id = S.id AND
												DPP.sede_id = S.id AND
												DPS.departamento_id = DP.id'
											
										);
		return $usuario;
	}
	
	
	
	public function calcular_total($lista_articulo,$cantidad)
	{
		$sum_costo = 0;
		for ($i=0; $i < count($lista_articulo) ; $i++) 
		{ 
			$articulo = $this->getArticulo($lista_articulo[$i]);
			$sum_costo = $sum_costo + 
								($articulo[0]['C']['precio_unitario_articulo'] * 
								$cantidad[$i]);
		}
		return $sum_costo;
	}
	
	/*public function insertSolicitudCompra($costo,$tienda_id,$persona_id,$cantidad)
	{
		if ($this->SolicitudCompra->add($tienda_id,$persona_id,date(),$costo))
		{
			return true;
		}
		else 
		{
			return false;	
		}
	}*/
	
	public function setCompraArticulo($username, $pass, $id_articulos, $cantidades)
	{
		$this->layout = null;
		$CODIGO_BIEN = "100";
		$CODIGO_ERROR_PARAM = "150";
		$CODIGO_ACCESO_DENEGADO = "200";
		$CODIGO_VACIO = "300";
		$CODIGO_ERROR = "400";
		
		$CODIGO_COMPLETO = $CODIGO_BIEN;
		$CODIGO_INCOMPLETO = $CODIGO_ACCESO_DENEGADO;
		$CODIGO_INCOMPLETO = $CODIGO_VACIO;
		
		$user['SETCOMPRAARTICULO'] = array();
		$datos_articulo = array();
		$arreglo_json = array();
		
		
							
		if (!$this->validar_usuario($username, $pass))
		{
			$user['SETCOMPRAARTICULO'] = array(
										'STATUS' => $CODIGO_ERROR_PARAM,
										'DATA' => array("")
									 ); 
		}
		else 
		{
			$usuario = $this->getUsuario($username);
		
			$list_articulos = explode(',', $id_articulos);
			$list_cantidades = explode(',', $cantidades);
			$buenas = array();
			$malas = array();
			
			if (count($list_articulos) == 0)
			{
				$user['SETCOMPRAARTICULO'] = array(
										'STATUS' => $CODIGO_ERROR_PARAM,
										'DATA' => array("")
									 ); 
			}
			else 
			{
				$costo = $this->calcular_total($list_articulos, $list_cantidades);
				/*Cambiar id_tienda*/
				$this->loadModel('SolicitudCompra');
				$this->SolicitudCompra->create();
				$data = array(
								'tienda_id' => '1',
								'persona_id' => $usuario[0]['U']['persona_id'],
								'fecha_solicitud_compra' => date('Y-m-d'),
								'total_solicitud_compra' => floatval($costo)
								);
								
				if ($this->SolicitudCompra->save($data))
				{
					
					for ($i=0; $i < count($list_articulos) ; $i++) 
					{ 
						if($this->insertArticuloSolicitudCompra($this->SolicitudCompra->id, 
																$list_cantidades[$i], 
																$this->getArticulo($list_articulos[$i])))
						{
							array_push($buenas,$list_articulos[$i]);
							
						}
						else 
						{
							array_push($malas,$list_articulos[$i]);
						}	
					}
					$datos = array();
					if (count($buenas) == count($list_articulos) )
					{
						array_push(
									$datos, array(
														'STATUS_SOLICITUD' => $CODIGO_BIEN
													)
								);
					}
					elseif (count($buenas) > 0) 
					{
						array_push(
									$datos, array(
														'STATUS_SOLICITUD' => $CODIGO_INCOMPLETO
													)
								);
					}
					else 
					{
						array_push(
									$datos, array(
														'STATUS_SOLICITUD' => $CODIGO_NINGUNO
													)
								);
					}
					
					
					
					array_push(
									$arreglo_json, array(
															'STATUS' => $CODIGO_BIEN,
															'DATA' => $datos,
														)
								);
					$user['SETCOMPRAARTICULO'] = $arreglo_json;
					
					
				}
				
				

			}

		}

		//return json_encode($user);
		$this->set('json',json_encode($user));

	}

	public function getFamiliar1($username)
	{
		$familiar = $this->User-> query(
											'SELECT F.*, P.*, FP.*
												FROM users U, familiares F, familiar_personas FP,
												parentescos P
												WHERE U.username = "'.$username.'" AND
												U.persona_id = FP.persona_id AND
												F.id = FP.familiares_id AND
												FP.parentesco_id = P.id'
								
							);
		return $familiar;
	}
	
	public function getEstudio($username)
	{
		$estudio = $this->User-> query(
											'SELECT E . * , UD . * , TE . *, EU.*
												FROM estudios E, universidads UD, estudio_universidads EU, users U, tipo_estudios TE
												WHERE U.persona_id = EU.persona_id
												AND UD.id = EU.universidad_id
												AND E.id = EU.estudio_id
												AND TE.id = E.tipo_estudio_id
												AND U.username =  "'.$username.'"'
										);
		return $estudio;
	}
	
	public function getSeguro($username)
	{
		$seguro = $this->User-> query(
											'SELECT S.*, P.*, TM.*
												FROM users U, departamento_personas DP, 
												sede_seguros SS, seguros S, 
												polizas P
												WHERE DP.persona_id = U.persona_id
												AND DP.fecha_fin_persona_departamento IS NULL
												AND DP.sede_id = SS.sede_id
												AND SS.fecha_fin_sede_seguro IS NULL 
												AND SS.active_sede_seguro = TRUE 
												AND SS.seguro_id = S.id 
												AND P.seguro_id = S.id
												AND P.persona_id = U.persona_id
												AND U.username =  "'.$username.'"'
										);
		
		return $seguro;
	}
	
	public function getAdiestramiento($username)
	{
		$adiestramiento = $this->User-> query(
											'SELECT A. * , TA. * 
												FROM adiestramientos A, adiestramiento_personas AP, users U, tipo_adiestramientos TA
												WHERE U.persona_id = AP.persona_id
												AND A.id = AP.adiestramiento_id
												AND TA.id = A.tipo_adiestramiento_id
												AND U.username =  "'.$username.'"'
										);
		return $adiestramiento;
	}

}
?>